/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Persistencia;

import Logica.Proyecto;
import Logica.Reunion;
import Logica.Usuario;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;

/**
 *
 * @author Facundo
 */
public class ADOProyecto {

    private Singleton_Conexion datosconexion;
    Connection conexion;

    public ADOProyecto() {
        try {
            Class.forName(datosconexion.getInstancia().getDriver());
            conexion = DriverManager.getConnection(datosconexion.getInstancia().getProtocolo());
        } catch (ClassNotFoundException ex) {
            ex.printStackTrace();
        } catch (java.sql.SQLException e1) {
            e1.printStackTrace();
        }
    }

    //hacer un traer proyecto por nombre
    public Proyecto traerProyectoPorNombre(String nombreProyecto) {
//        ADOReunion persistenciaReunion = new ADOReunion();
//        ADOUsuario persistenciaUsuario = new ADOUsuario();
//        ResultSet rs = null;
//        LinkedList usuariosPorProyecto;
//        LinkedList reunionesPorProyecto;
//        ArrayList<Usuario> usuarios;
//        ArrayList<Reunion> reuniones;
//        Proyecto p = null;
//        try {
//            PreparedStatement st;
//            String sentencia = "select p.nombre FROM proyecto p where p.nombre='" + nombreProyecto + "'";
//            System.out.println(sentencia);
//            st = conexion.prepareStatement(sentencia);
//            rs = st.executeQuery();
//            while (rs.next()) {
//                p = new Proyecto(rs.getString("p.nombre"));
//                usuariosPorProyecto = persistenciaUsuario.traerUsuariosPorProyecto(rs.getString("p.nombre"));
//                Iterator it = usuariosPorProyecto.iterator();
//                usuarios = new ArrayList<Usuario>();
//                while (it.hasNext()) {
//                    usuarios.add((Usuario) it.next());
//                }
//                p.setUsuarios(usuarios);
//                reunionesPorProyecto = persistenciaReunion.obtenerReunionesPorProyecto(rs.getString("p.nombre"));
//                it = reunionesPorProyecto.iterator();
//                reuniones = new ArrayList<Reunion>();
//                while (it.hasNext()) {
//                    reuniones.add((Reunion) it.next());
//                }
//                p.setReuniones(reuniones);
//            }
//            st.close();
//        } catch (java.sql.SQLException e1) {
//            System.out.println("si");
//            System.out.println(e1.toString());
//        }
//        return p;
        ResultSet rs = null;
        Proyecto proyecto = null;
        try {
            PreparedStatement st;
            String sentencia = "select p.nombre FROM proyecto p, usuariosxproyecto up where p.nombre ='" + nombreProyecto + "'";
            System.out.println(sentencia);
            st = conexion.prepareStatement(sentencia);
            rs = st.executeQuery();
            while (rs.next()) {
                proyecto = new Proyecto(rs.getString("nombre"));
                System.out.println("si");
            }
            st.close();
        } catch (java.sql.SQLException e1) {
            System.out.println(e1.toString());
        }
        return proyecto;
    }

    public LinkedList traerProyectos() {
        ADOReunion persistenciaReunion = new ADOReunion();
        ADOUsuario persistenciaUsuario = new ADOUsuario();
        ResultSet rs = null;
        LinkedList proyectos = new LinkedList();
        LinkedList usuariosPorProyecto;
        LinkedList reunionesPorProyecto;
        ArrayList<Usuario> usuarios;
        ArrayList<Reunion> reuniones;
        try {
            PreparedStatement st;
            String sentencia = "select p.nombre FROM proyecto p";
            System.out.println(sentencia);
            st = conexion.prepareStatement(sentencia);
            rs = st.executeQuery();
            while (rs.next()) {
                Proyecto p = new Proyecto(rs.getString("p.nombre"));
                usuariosPorProyecto = persistenciaUsuario.traerUsuariosPorProyecto(rs.getString("p.nombre"));
                Iterator it = usuariosPorProyecto.iterator();
                usuarios = new ArrayList<Usuario>();
                while (it.hasNext()) {
                    usuarios.add((Usuario) it.next());
                }
                p.setUsuarios(usuarios);
                reunionesPorProyecto = persistenciaReunion.obtenerReunionesPorProyecto(rs.getString("p.nombre"));
                it = reunionesPorProyecto.iterator();
                reuniones = new ArrayList<Reunion>();
                while (it.hasNext()) {
                    reuniones.add((Reunion) it.next());
                }
                p.setReuniones(reuniones);
                proyectos.add(p);
            }
            st.close();
        } catch (java.sql.SQLException e1) {
            System.out.println("si");
            System.out.println(e1.toString());
        }
        return proyectos;
    }

    public LinkedList traerSoloNombresProyectosParaUsuarioLogueado(String usuario) {
        ResultSet rs = null;
        LinkedList proyectos = new LinkedList();
        try {
            PreparedStatement st;
            String sentencia = "select p.nombre FROM proyecto p, usuariosxproyecto up where p.nombre = "
                    + "up.nombre_proyecto and up.nombre_usuario='" + usuario + "'";
            System.out.println(sentencia);
            st = conexion.prepareStatement(sentencia);
            rs = st.executeQuery();
            while (rs.next()) {
                Proyecto p = new Proyecto(rs.getString("nombre"));
                proyectos.add(p);
                System.out.println("si");
            }
            st.close();
        } catch (java.sql.SQLException e1) {

            System.out.println(e1.toString());
        }
        return proyectos;
    }

    public boolean insertarProyecto(Proyecto p) {
        ADOReunion persistenciaReunion = new ADOReunion();
        try {
            PreparedStatement st;
            String sentencia = "insert into proyecto (nombre) values(?)";
            st = conexion.prepareStatement(sentencia);
            System.out.println(sentencia);
            st.setString(1, p.getNombre());
            st.execute();
            st.close();
            //Facu tenes un error probablemente en este For que sigue que si hago un debug no entra directamente
            for (int i = 0; i < p.getUsuarios().size(); i++) {
                sentencia = "insert into usuariosxproyecto (nombre_proyecto, nombre_usuario) values (?,?)";
                st = conexion.prepareStatement(sentencia);
                System.out.println(sentencia);
                st.setString(1, p.getNombre());
                st.setString(2, p.getUsuarios().get(i).getNombreUsuario());
                st.execute();
                st.close();
            }
            for (int i = 0; i < p.getReuniones().size(); i++) {
                persistenciaReunion.insertarReunion(p.getReuniones().get(i), p.getNombre());
            }

        } catch (java.sql.SQLException e1) {
            return false;
        }
        return true;
    }
}
